tg-me.com/pyproglib/6711
Last Update:
flexicache
В Python удобно использовать декораторы для кэширования результатов функций и методов — как в оперативной памяти, так и во временных хранилищах вроде memcached
. Один из наиболее гибких инструментов для этого — flexicache
из библиотеки fastcore
.
flexicache — это декоратор, который поддерживает:
• LRU-кэширование (удаление наименее используемых элементов),
• политику истечения кэша по времени — time_policy
,
• инвалидирование кэша при изменении файла — mtime_policy
.time_policy
@flexicache(time_policy(0.1))
def random_func():
return randint(1, 1000)
assert random_func() == random_func()
sleep(0.2)
assert random_func() != random_func()
mtime_policy
. Инвалидирование при изменении файла main.py
@flexicache(mtime_policy('main.py'))
def random_func():
return randint(1, 1000)
Path('main.py').touch() # обновление времени изменения
@flexicache(time_policy(0.1), mtime_policy('main.py'))
def random_func():
return randint(1, 1000)
Кэш сбрасывается либо по времени, либо при обновлении файла — в зависимости от того, что произойдёт первым.
@flexicache(maxsize=2)
def random_func(v):
return randint(1, 1000)
random_func(1)
random_func(2)
random_func(3) # результат для аргумента 1 будет удалён
timed_cache
. Для кэша с таймаутом и ограничением размераfrom fastcore.xtras import timed_cache
@timed_cache(0.1, maxsize=2)
def random_func(v):
return randint(1, 1000)
📌
flexicache
— гибкий и мощный инструмент для продвинутого кэширования в Python. Поддерживает политики истечения, комбинирование стратегий и заменяет стандартный lru_cache
.Библиотека питониста #буст